PInsert Class Reference

List of all members.

Public Member Functions

 __construct ()
 showForm ($file_upload=false, $Buttons=0, $copyFile=null)
 printSubFolder ($fileID, $sql_add, &$folderArr, $COUNT=0, $layer="··")
 fileSizeOK ($size)
 fileExtOK ($name)
 sendEmail ($fileID, $toTeachers=false)
 resolveForm ($data)

Private Member Functions

 uploadFile ($data)

Private Attributes

 $maxFileSize
 $forbiddenFileExtensions
 $role = null
 $team = null

Detailed Description

Definition at line 54 of file class.insertNotenliste.inc.php.


Constructor & Destructor Documentation

PInsert::__construct (  ) 

Konstruktor. public

Definition at line 83 of file class.insertNotenliste.inc.php.

References $_SESSION.

00083                                   {
00084         global $settings;
00085         if (is_numeric($settings['filemanager_max_filesize'])) $this->maxFileSize = $settings['filemanager_max_filesize'];
00086         $this->forbiddenFileExtensions = $settings['filemanager_forbidden_extensions'];
00087         if (isset($_SESSION["roleID"])) {
00088             $this->role = new Role($_SESSION["roleID"]);
00089         }
00090         if (isset($_SESSION["teamID"])) {
00091             $this->team = new Team($_SESSION["teamID"]);
00092         }
00093     }


Member Function Documentation

PInsert::fileExtOK ( name  ) 

Prüft ob der Dateityp laut Config-File erlaubt ist public

Parameters:
string $name - Dateiname
Returns:
bool - true wenn Dateityp OK

Definition at line 203 of file class.insertNotenliste.inc.php.

Referenced by resolveForm().

00203                                      {
00204         if ($this->forbiddenFileExtensions) {
00205             $pos = strrpos($name, ".");
00206             if ($pos) {
00207                     $ext = substr($name, $pos+1);
00208                     if (is_array($this->forbiddenFileExtensions)) {
00209                         foreach($this->forbiddenFileExtensions as $value) {
00210                             if (strtolower($ext) == strtolower($value)) return false;
00211                         }
00212                     } elseif (strtolower($ext) == strtolower($this->forbiddenFileExtensions)) return false;
00213             }
00214         }
00215         return true;
00216     }

PInsert::fileSizeOK ( size  ) 

Prüft ob die Dateigröße dem Limit im Config-File entspricht public

Parameters:
integer $size - Größe der Datei
Returns:
bool - true wenn Größe OK

Definition at line 190 of file class.insertNotenliste.inc.php.

Referenced by resolveForm().

00190                                       {
00191         if ($this->maxFileSize) {
00192             if (($size/1000000) > $this->maxFileSize) return false;
00193             if ($size <= 0) return false;
00194         }
00195         return true;
00196     }

PInsert::printSubFolder ( fileID,
sql_add,
&$  folderArr,
COUNT = 0,
layer = "&#183;&#183;" 
)

erstellt eine baumstrukur aller Ordner auf die der User Schreibrechte hat und die er sehen darf private

Parameters:
ezsql [$fileID] -
string [$sql_add] - SQL zusatz, ist Usergruppenabhaenigig
array [$folderArr] - Array der Ermittelten Folder, ist ein Zeiger der Uebergeben wird
int [$COUNT] - Ist der Array Zaehler von folderArr
string [$layer] - Sind die zeichen vorm Ordnernamen fuer visualisierung der baumstrukur
Returns:
Anzahl der Elemente im Array

Definition at line 174 of file class.insertNotenliste.inc.php.

References $_SESSION, and $db.

00174                                                                                                         {
00175         global $db;
00176         $folders = $db->get_results("SELECT fileID, link, student_write, userID FROM filelist WHERE parent_object='".$fileID."' AND courseID=".$_SESSION['course']."  AND type='folder' $sql_add ORDER BY name");
00177         if ($folders) foreach($folders as $folder) {
00178             $folderArr[$COUNT][0] = $layer." &#8226; ".Data::toHTML($folder->link, false);
00179             $folderArr[$COUNT++][1] = $folder->fileID;
00180             $COUNT = $this->printSubFolder($folder->fileID, $sql_add, $folderArr, $COUNT, $layer."&#183;&#183;");
00181         }
00182         return $COUNT;
00183     }

PInsert::resolveForm ( data  ) 

Wertet das Formular aus und traegt die Daten in die Datenbank ein public

Parameters:
array $data - Array mit dem Formulareintraegen
Returns:
bool - Erfolgswert

Definition at line 263 of file class.insertNotenliste.inc.php.

References $_SESSION, $db, fileExtOK(), fileSizeOK(), sendEmail(), and uploadFile().

00263                                        {
00264         global $db, $EZSQL_ERROR;
00265         echo "<table>";
00266         /************************************ FEHLERUEBERPRUEFUNG BEGIN***********************************************/
00267         if ($data['link'] == "") {
00268                 switch ($data['type']) {
00269                     case 'ROOT':
00270                     case 'folder':
00271                         $ERROR = "Sie haben keinen Ordnernamen angegeben!";
00272                         break;
00273 
00274                     case 'link':
00275                         $ERROR = "Sie haben keinen Link angegeben!";
00276                         break;
00277 
00278                     case 'file':
00279                         $ERROR = "Sie haben keine Datei ausgew&auml;hlt!";
00280                         break;
00281                 }
00282                 Output::errorMessage($ERROR, 2);
00283             }
00284             if ($data['name'] == "") {
00285                 switch ($data['type']) {
00286                     case 'ROOT':
00287                     case 'folder':
00288                         $ERROR = "Sie haben keinen erl&auml;uternden Ordnernamen (Tooltip) angegeben!";
00289                         break;
00290 
00291                     case 'link':
00292                         $ERROR = "Sie haben keinen Namen f&uuml;r den Link angegeben!";
00293                         break;
00294 
00295                     case 'file':
00296                         $ERROR = "Sie haben keinen Namen f&uuml;r die  Datei angegeben!";
00297                         break;
00298                 }
00299                 if (!empty($ERROR)) Output::errorMessage($ERROR, 2);
00300             }
00301             if ($data['parent_object'] == "" && $data['type'] != 'ROOT') {
00302                 $ERROR = "Sie haben keinen Zielordner ausgew&auml;hlt!";
00303                 Output::errorMessage($ERROR, 2);
00304             }
00305             if ($data['type'] == 'link') {
00306                 if (!Utilities::validateURL($data['link'])) {
00307                     $ERROR = "Sie haben eine ung&uuml;ltige URL angegeben!";
00308                     Output::errorMessage($ERROR, 2);
00309                 }
00310                 if (strlen($data['name']) > 40) {
00311                     $ERROR = "Linkname darf h&ouml;chstens 40 Zeichen lang sein.";
00312                     Output::errorMessage($ERROR, 2);
00313                 }
00314             }
00315             if ($data['type'] == 'file') {
00316                 if ($data['orig_filename'] == '' || strlen($data['extension']) > 5 || strlen($data['extension']) < 0) {
00317                     $ERROR = "Keine Datei ausgew&auml;hlt oder Dateiendung ung&uuml;ltig! (L&auml;nge hinter . 1-4)";
00318                     Output::errorMessage($ERROR, 2);
00319                     if ($data['tmpfileTmpName'] != '') unlink($data['tmpfileTmpName']);
00320                 } elseif (!($this->fileSizeOK($data['size']))) {
00321                     $ERROR = "Datei ist entweder &uuml;ber der zul&auml;ssigen Gr&ouml;&szlig;e, oder sie ist leer!";
00322                     Output::errorMessage($ERROR, 2);
00323                     if ($data['tmpfileTmpName'] != '') unlink($data['tmpfileTmpName']);
00324                 } elseif (!($this->fileExtOK($data['orig_filename']))) {
00325                     $ERROR = "Dateityp ist nicht erlaubt!";
00326                     Output::errorMessage($ERROR, 2);
00327                     if ($data['tmpfileTmpName'] != '') unlink($data['tmpfileTmpName']);
00328                 }
00329             }
00330             if ($data['type'] == 'folder') {
00331                 if (strlen($data['link']) > 20) {
00332                     $ERROR = "Ordnername darf h&ouml;chstens 20 Zeichen lang sein.";
00333                     Output::errorMessage($ERROR, 2);
00334                 }
00335             }
00336             // Wenn bis hierher schon ein Fehler festgestellt wurde bricht er ab
00337             if (isset($ERROR)) {
00338                 echo "</table>";
00339                 return false;
00340             }
00341             /************************************ FEHLERUEBERPRUEFUNG ENDE ***********************************************/
00342             switch ($data['type']) {
00343                 case 'ROOT': // Hauptordner anlegen
00344                     $data['type'] = 'folder';
00345                     $data['parent_object'] = 0;
00346                     $type = "von Hauptordner";
00347                     break;
00348 
00349                 case 'folder': // Unterordner anlegen
00350                     $type = "von Ordner";
00351                     break;
00352 
00353                 case 'link':
00354                     $type = "von Link";
00355                     break;
00356 
00357                 case 'file':
00358                     $type = "von Datei";
00359                     break;
00360             }
00361             // Baut die SQL Abfrage anhand des Arrays data auf.
00362             // Alle Felder ohne "tmp" werden als FeldName benutzt und ihr Wert in die DB eingetragen
00363             $SQL_keys = $SQL_values = '';
00364             foreach($data as $key => $value) {
00365                 if (!strstr($key, "tmp")) {
00366                     $SQL_keys.= $key.',';
00367                     $SQL_values.= "'".Data::toMysql($value) ."',";
00368                 }
00369             }
00370             // Ordner existiert schon ??
00371             if ($data['type'] == 'folder' && ($db->get_var("SELECT fileID FROM filelist WHERE parent_object='".$data['parent_object']."' AND courseID =".$data['courseID']." AND link='".$data['link']."' LIMIT 1") != "")) {
00372                 Output::errorMessage("Ein Ordner mit dem selben Namen existiert schon in diesem Ordner.<br/>W&auml;hlen Sie bitte einen anderen Namen.", 2);
00373                 echo "</table>";
00374                 return false;
00375             }
00376             // Selber Link schon in diesem Ordner vorhanden ??
00377             if ($data['type'] == 'link' && $db->get_var("SELECT fileID FROM filelist WHERE parent_object='".$data['parent_object']."' AND courseID=".$_SESSION['course']." AND link='".$data['link']."' LIMIT 1") != "") {
00378                 Output::errorMessage("Ein Link mit dem selben Namen existiert bereits in diesem Ordner!", 2);
00379                 echo "</table>";
00380                 return false;
00381             }
00382             $SQL = "INSERT INTO filelist (".substr($SQL_keys, 0, -1) .") VALUES (".substr($SQL_values, 0, -1) .")"; // SQL Abfrage ohne Endene Kommas
00383             $errorCount = count($EZSQL_ERROR);
00384             $db->query($SQL);
00385             $data['fileID'] = $db->insert_id;
00386             if (count($EZSQL_ERROR) > $errorCount || $data['fileID'] < 0) {
00387                 Output::errorMessage("Fehler beim Anlegen ".$type." in der Datenbank!");
00388                 echo "</table>";
00389                 return false;
00390             } elseif ($data['type'] == 'file') {
00391                 if (!$this->uploadFile($data)) {
00392                     $db->query("DELETE FROM filelist WHERE fileID='${data['fileID']}'");
00393                     $data['fileID'] = "";
00394                     Output::errorMessage("Aktion nicht erfolgreich durchgef&uuml;hrt!", 2);
00395                     echo "</table>";
00396                     return false;
00397                 }
00398             }
00399             if (isset($this->role)) {
00400                 RoleArtefacts::setRoleForItem(RESSOURCE, $data["fileID"], $_SESSION["roleID"]);
00401             }
00402             if (isset($this->team)) {
00403                 TeamArtefacts::setTeamForItem(RESSOURCE, $data["fileID"], $_SESSION["teamID"]);
00404             }
00405             if ($data['fileID'] && $data['visible_type'] != 1 && isset($data['tmpfileVisibleList'])) {
00406                 // Spezielle UserSichtbarkeit in DB eintragen
00407                 $errorCount = count($EZSQL_ERROR);
00408                 foreach($data['tmpfileVisibleList'] as $value) {
00409                     $db->query("INSERT INTO filevisible (fileID,userID) VALUES(".$data['fileID'].",".$value.")");
00410                 }
00411                 if (count($EZSQL_ERROR) > $errorCount) {
00412                     Output::errorMessage("Aktion nicht erfolgreich durchgef&uuml;hrt!", 2);
00413                     echo "</table>";
00414                     return false;
00415                 }
00416             }
00417             if ($data['type'] != 'file') {
00418                 if ($data['tmpemail'] || $data['tmpteacherEMail']) {
00419                     if ($this->sendEmail($data['fileID'], ($data['tmpteacherEMail'] && !$data['tmpemail']))) Output::echoMessage("Benachrichtigungs-Mails versandt.", 2);
00420                     else Output::errorMessage("Benachrichtigungs-Mails konnten nicht versandt werden!", 2);
00421                 }
00422             }
00423             Output::echoMessage("Aktion wurde erfolgreich durchgef&uuml;hrt!", 2);
00424             echo "</table>";
00425             unset($_POST);
00426             if ($data['type'] == 'file') {
00427                 // hochgeladene Datei indizieren
00428                 $spider = new Spider();
00429                 $spider->start("add-file", $data['fileID']);
00430             }
00431             return $data["fileID"];
00432         }

PInsert::sendEmail ( fileID,
toTeachers = false 
)

Versendet die Benachrichtigungsmail für eine neue hochgeladene Datei. public

Parameters:
integer $fileID - die ID der hochgeladenen Datei
bool $toTeachers - ob die Emails nur an Dozenten geschickt werden sollen
Returns:
bool

Definition at line 224 of file class.insertNotenliste.inc.php.

References $_SESSION, and $db.

Referenced by resolveForm(), and uploadFile().

00224                                                             {
00225         global $db, $settings;
00226         if (!is_numeric($fileID)) return false;
00227         $file = $db->get_row("SELECT * FROM filelist WHERE fileID='$fileID'");
00228         if ($file) {
00229             $email = new Email($_SESSION['userid']);
00230             if ($toTeachers) {
00231                 if ($file->courseID == 0) {
00232                     $query = "SELECT ID FROM user WHERE Usergroup=3";
00233                 } else {
00234                     $query = "SELECT ID
00235                           FROM user JOIN user_course ON ID=userID
00236                           WHERE courseID='".$file->courseID."' AND
00237                                 ((differentUsergroup=0 AND Usergroup=3) OR differentUsergroup=3)";
00238                 }
00239             } else {
00240                 if ($file->courseID == 0) {
00241                     $query = "SELECT ID FROM user WHERE Invisible=0";
00242                 } else {
00243                     $query = "SELECT userID FROM user_course WHERE courseID ='".$file->courseID."'";
00244                 }
00245             }
00246             $users = $db->get_col($query);
00247             if ($file->courseID > 0) {
00248                 $courseName = $db->get_var("SELECT Name FROM courses WHERE ID='".$file->courseID."'");
00249             }
00250             $user = $db->get_row("SELECT Vorname, Nachname FROM user WHERE ID='".$file->userID."'");
00251             $subject = $settings["label"].": Neue Ressource im ".(empty($courseName) ? "Foyer" : "Kurs \"$courseName\"");
00252             $message = "Guten Tag,\n\n".$user->Vorname." ".$user->Nachname." hat ".($file->type == "link" ? "einen neuen Link" : ($file->type == "file" ? "eine neue Datei" : "einen neuen Ordner")) ." mit der Bezeichnung\n\n\t".$file->name.(empty($file->description) ? "" : "\n\n\t".$file->description) ."\n\nim ".(empty($courseName) ? "Foyer" : "Kurs \"$courseName\"") ." bereitgestellt".($file->type == "link" ? ":\n\n\t<".$file->link.">" : ".") ."\n\nViele Grüße,\n\nIhr Kursdozent";
00253             return $email->sendMessageToUser($subject, $users, $message);
00254         }
00255         return false;
00256     }

PInsert::showForm ( file_upload = false,
Buttons = 0,
copyFile = null 
)

Generiert Formular für Insert public

Returns:
void

Definition at line 99 of file class.insertNotenliste.inc.php.

References $_SESSION, and $db.

00099                                                                                    {
00100         global $db, $EZSQL_ERROR;
00101         // Initialisierung
00102         $MaxFileSize = $this->maxFileSize;
00103         $ForbiddenFileExtensions = $this->forbiddenFileExtensions;
00104         $time = time();
00105         $sql_add = "";
00106         $heute = getdate();
00107         $course = $_SESSION['course'];
00108         $form = new Formular();
00109         // INITIALISIERUNG von Kalender Anzeige
00110         // DateSelection Objekt erzeugen und das heutige (start-) Datum einstellen
00111         $calendar = new DateSelection($heute['mday'], $heute['mon'], $heute['year'], $heute['hours'], $heute['minutes']);
00112         //Javascript deaktivieren
00113         $calendar->autoUpdate = false;
00114         //Name des Formulars einstellen
00115         $calendar->formName = "insert";
00116         //Die Ausgabestrings löschen (keine Bezeichner vor den Auswahlfeldern)
00117         $calendar->clearStrings();
00118                 
00119                 // URL ins Feld einfügen und Radio Button vorselektieren, sofern übergeben
00120                 if(isset($_GET['url'])) {
00121                         $actionChecked = 'link';
00122                         $linkUrl = $_GET['url'];
00123                 }                       
00124                 else {
00125                         $linkUrl = '';
00126                         $actionChecked = '';
00127                 }
00128 
00129                 // Link Name ins Feld einfügen, sofern übergeben
00130                 if(isset($_GET['name']))
00131                         $linkName = $_GET['name'];
00132                 else
00133                         $linkName = '';                                         
00134                 
00135         // BEGIN von Formular erstellen
00136         // Init
00137         $form->setFormHead("insert", "", "post", "multipart/form-data", "onsubmit=\"".(!$file_upload ? "if (document.getElementById('link_ID').checked == false &amp;&amp; document.getElementById('folder_ID').checked == false".(($_SESSION['usergroup'] != STUDENT && $_SESSION['usergroup'] != ALUMNUS && $_SESSION['usergroup'] != SCHUELER && $_SESSION['usergroup'] != GAST) || isset($_SESSION["assistent"]) ? " &amp;&amp; document.getElementById('ROOT_ID').checked == false" : "") .") { alert('Bitte w&auml;hlen Sie, ob Sie einen Link oder Ordner erstellen wollen!'); return false; } ":
00138             "") ."if (document.getElementById('folder').value == ''".(!$file_upload && (($_SESSION['usergroup'] != STUDENT && $_SESSION['usergroup'] != ALUMNUS && $_SESSION['usergroup'] != SCHUELER && $_SESSION['usergroup'] != GAST) || isset($_SESSION["assistent"])) ? " &amp;&amp; document.getElementById('ROOT_ID').checked == false" : "") .") { alert('Bitte w&auml;hlen Sie einen Zielordner!'); return false; }\"");
00139         $form->setTemplate("<table>", "<tr valign='top'><td class='tableCell'>", "<td class='tableCell'>"); // Setzt die UmgebungsTags
00140         if($Buttons)
00141                 $form->setButtons(2, "Upload", "Ignorieren"); //Setzt die Buttons
00142         else
00143                 $form->setButtons(2, "Upload"); //Setzt die Buttons
00144                 
00145         if (isset($this->role)) {
00146             $form->addRawCode("<tr><td class='message' colspan='2'>Sie nehmen zur Zeit die Rolle <strong>".Data::toHTML($this->role->getName($_SESSION["gender"]), false) ."</strong> ein.<br />Wenn Sie ".($file_upload ? "eine Datei hochladen, wird diese" : "einen Ordner oder Link erstellen, wird dieser") ." unter Ihrem Rollennamen ver&ouml;ffentlicht.</td></tr>");
00147         }
00148         // TrennZeile
00149         $form->addRawCode("<tr><td class='tableHead' colspan='2'>Ben&ouml;tigte Einstellungen</td></tr>"); // Fuegt eine Ueberschriftszeile ein
00150         // Wenn eine Datei hochgeladen werden soll
00151         if ($file_upload) {
00152             $form->addInput("hidden", "type", "", 1, "file");
00153             $form->addInput("hidden", "MAX_FILE_SIZE", "", 1, $MaxFileSize*1024*1024);
00154             
00155             $name = (!is_null($copyFile)) ? $copyFile->getName() : "";
00156                     $string = "Bitte w&auml;hlen Sie eine CSV-Datei aus:<br/>";
00157                     $string.= "<span class='text10'>";
00158                     $string.= "</span>";
00159                     $form->addInput("file", "userfile", $string, 34);
00160         } 
00161                         $form->addButtons();
00162             echo $form->getForm(1);
00163         }       

PInsert::uploadFile ( data  )  [private]

Laed die Datei mit der fileID $fileID hoch

Parameters:
array [$data] Array mit den Formular-Eingaben
Returns:
boolean Erfolgswert private

Definition at line 440 of file class.insertNotenliste.inc.php.

References sendEmail().

Referenced by resolveForm().

00440                                            {
00441             global $settings;
00442             // Konstruktion des Uploadverzeichnis
00443             $uploaddir = PATH_TO_ROOT.$settings["upload_path"].'filemanager/courseID/'.$data['courseID'].'/';
00444             // Verzeichnis anlegen wenn noch nicht vorhanden
00445             if (!(is_dir($uploaddir))) Utilities::mkdir_r($uploaddir);
00446             $uploadSuccess = false;
00447             // Datei wird hochgeladen
00448             if (isset($data['tmpfileTmpName'])) {
00449                 $uploadSuccess = move_uploaded_file($data['tmpfileTmpName'], $uploaddir.$data['link']);
00450             } else if (isset($data['tmpPathToFile'])) {
00451                 $uploadSuccess = copy( $data['tmpPathToFile'], $uploaddir.$data['link'] );
00452             }
00453             if ( $uploadSuccess ) {
00454                 if ($data['tmpemail'] || $data['tmpteacherEMail']) {
00455                     if ($this->sendEmail($data['fileID'], ($data['tmpteacherEMail'] && !$data['tmpemail']))) Output::echoMessage("Benachrichtigungs-Mails versandt.", 1);
00456                     else Output::errorMessage("Benachrichtigungs-Mails konnten nicht versandt werden!", 1);
00457                 }
00458                 Output::echoMessage("Datei erfolgreich gesendet", 1);
00459                 return true;
00460             } else {
00461                 Output::errorMessage("Fehler beim Senden der Datei aufgetreten!", 1);
00462                 return false;
00463             }
00464         }


Member Data Documentation

PInsert::$forbiddenFileExtensions [private]

Verbotene Dateiendungen private array

Definition at line 66 of file class.insertNotenliste.inc.php.

PInsert::$maxFileSize [private]

Die maximale Größe für hochgeladene Dateien. private integer

Definition at line 60 of file class.insertNotenliste.inc.php.

PInsert::$role = null [private]

Rolle des aktuellen Benutzers, falls eine eingenommen wird. private object

Definition at line 72 of file class.insertNotenliste.inc.php.

PInsert::$team = null [private]

Team des Benutzers private object

Definition at line 78 of file class.insertNotenliste.inc.php.


The documentation for this class was generated from the following file:
 All Classes Namespaces Files Functions Variables Enumerations

Generated on Fri Oct 30 17:21:39 2009 for MSP Modul Ressourcen by  doxygen 1.6.1